package com.example.htmlspringtest.base.web;

import com.example.htmlspringtest.base.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.crypto.interfaces.PBEKey;

/**
 * @belongsProject: HTML-Spring-test
 * @belongsPackage: com.example.htmlspringtest.base.web
 * @author: dongmufengchun
 * @createTime: 2022-06-19  15:05
 * @description: BaseController 用于规范所有的Controller基础方法的实现
 * @version: 1.0
 */
public abstract  class BaseController<T,S extends BaseService> {

    @Autowired
    S service;

    /**
     * 功能简介: 获取前缀Perfix
     * @Author dongmufengchun
     * @Date 16:29 2022/6/19
     * @return java.lang.String
    **/
    public abstract String getPerfix();

    /**
     * 功能简介: 利用map.put()方法将查询到的数据传到html里
     * @Author dongmufengchun
     * @Date 16:28 2022/6/19
     * @param map ModelMap
     * @return java.lang.String
    **/
    @RequestMapping
    public String list(ModelMap map){
        map.put("entityList",service.findList());
        return getPerfix()+"/list";
    }

    /**
     * 功能简介: 添加数据
     * @Author dongmufengchun
     * @Date 16:28 2022/6/19
     * @return java.lang.String
    **/
    @GetMapping("add")
    public String add(){
        return getPerfix()+"/add";
    }

    /**
     * 功能简介: 保存添加的数据，重定向返回
     * @Author dongmufengchun
     * @Date 16:28 2022/6/19
     * @param entity 实体类对象
     * @return java.lang.String
    **/
    @PostMapping("add")
    public String add(T entity){
        service.save(entity);
        return  "redirect:"+getPerfix();
    }

    /**
     * 功能简介: 进入修改页面，将要修改的数据put到前端
     * @Author dongmufengchun
     * @Date 16:28 2022/6/19
     * @param id id
     * @param map ModelMap
     * @return java.lang.String
    **/
    @GetMapping("edit/{id}")
    public String edit(@PathVariable("id") Long id,ModelMap map){
        map.put("entity",service.findById(id));
        return getPerfix()+"/edit";
    }

    /**
     * 功能简介: 将要修改的数据填写完成之后，调用update进行修改，并重定向返回
     * @Author dongmufengchun
     * @Date 16:27 2022/6/19
     * @param entity 实体类对象
     * @return java.lang.String
    **/
    @PostMapping("edit")
    public String edit(T entity){
        service.update(entity);
        return "redirect:"+getPerfix();
    }

    /**
     * 功能简介: 根据id进行删除操作
     * @Author dongmufengchun
     * @Date 16:27 2022/6/19
     * @param id id
     * @return java.lang.String
    **/
    @GetMapping("delete/{id}")
    public String delete(@PathVariable Long id){
        service.delete(id);
        return "redirect:"+getPerfix();
    }
}

